package com.it.schoolbookshop_back.controller.orders;

import com.it.schoolbookshop_back.entities.po.Result;
import com.it.schoolbookshop_back.service.MoneyService;
import com.it.schoolbookshop_back.utils.UserContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户资金相关接口
 */
@Slf4j
@RestController
@RequestMapping("/api/orders")
@CrossOrigin
public class MoneyController {

    @Autowired
    private MoneyService moneyService;

    /**
     * 用户余额充值
     * 
     * @param rechargeBalance 充值金额
     * @return 充值结果
     * 
     * 接口说明：
     * 用户ID从token中获取，通过路径传参传来充值金额，与用户余额相加。
     * 注意：输入的金额必须大于零，如果不符合条件需要给出相应提示。
     */
    @PutMapping("/recharge/{rechargeBalance}")
    public Result<?> recharge(@PathVariable Double rechargeBalance) {
        // 从token中获取用户ID
        Integer userId = UserContext.getUserId();
        if (userId == null) {
            return Result.unauthorized();
        }

        log.info("用户 {} 请求充值 {} 元", userId, rechargeBalance);

        try {
            // 调用服务进行充值
            boolean success = moneyService.recharge(userId, rechargeBalance);
            
            if (success) {
                // 获取更新后的余额
                Double currentBalance = moneyService.getUserBalance(userId);
                
                // 构建响应数据
                Map<String, Object> data = new HashMap<>();
                data.put("balance", currentBalance);
                
                return Result.success("充值成功", data);
            } else {
                return Result.failed("充值失败，请稍后重试");
            }
        } catch (IllegalArgumentException e) {
            // 参数校验错误（如金额小于等于0）
            return Result.validateFailed(e.getMessage());
        } catch (Exception e) {
            log.error("充值过程中发生错误: {}", e.getMessage(), e);
            return Result.failed("充值过程中发生错误: " + e.getMessage());
        }
    }
}
